package com.hesicare.untils.mqUtils;

import com.ewell.mq.queue.QueueTools;
import com.ibm.mq.MQException;
import com.ibm.mq.MQQueueManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class EwellOnUtil {

    protected final static Logger LOGGER = LoggerFactory.getLogger(EwellOnUtil.class);

    /**
     * @param fid 服务Id
     * @param reqMsg 入参
     * */
    public synchronized String getMsg(String fid, String reqMsg) {
        QueueTools queueTools = new QueueTools();
        // 队列管理器实例
        MQQueueManager queueManager = null;
        // 消息Id
        String msgId = null;
        // 请求数据
        //String reqMsg = "req-data";
        // 响应数据
        String respMsg = null;
        try {
            // 连接MQ，获取队列管理器实例，该实例如果不调用方法进行断开操作可长期保持连接。连接函数会自动读取配置文件标签名为“QMGR.SXX”下的配置信息进行连接。，
            queueManager = queueTools.connect("QMGR.S41");
            // 发送请求消息
            msgId = queueTools.putMsg(queueManager, fid, reqMsg);
            // 获取响应消息
            respMsg = queueTools.getMsgById(queueManager, fid, msgId, 3);

            // 此处为获取响应数据后的业务处理

        } catch (MQException e) {
            // 2033表示队列中没有消息
            if (e.reasonCode == 2033) {

            } else {
                LOGGER.error("创建MQ连接错误" + e);
            }
        } catch (Exception e) {
            LOGGER.error("MQ收发消息错误:" + e + " 入参为" + reqMsg);
            e.printStackTrace();
        } finally {
            //断开MQ连接
            if (null != queueManager) {
                try {
                    queueManager.disconnect();
                } catch (MQException e) {
                    LOGGER.error("端口MQ连接时错误" + e);
                }
            }
        }
        return respMsg;
    }


    public synchronized String sendMsg(String fid, String reqMsg) {
        QueueTools queueTools = new QueueTools();
        // 队列管理器实例
        MQQueueManager queueManager = null;
        // 消息Id
        String msgId = null;
        // 请求数据
        //String reqMsg = "req-data";
        // 响应数据
        String respMsg = null;
        try {
            // 连接MQ，获取队列管理器实例，该实例如果不调用方法进行断开操作可长期保持连接。连接函数会自动读取配置文件标签名为“QMGR.SXX”下的配置信息进行连接。，
            queueManager = queueTools.connect("QMGR.P41");
            // 发送请求消息
            msgId = queueTools.putMsg(queueManager, fid, reqMsg);
            // 获取响应消息
            respMsg = queueTools.getMsgById(queueManager, fid, msgId, 3);

            // 此处为获取响应数据后的业务处理

        } catch (MQException e) {
            // 2033表示队列中没有消息
            if (e.reasonCode == 2033) {

            } else {
                LOGGER.error("创建MQ连接错误" + e);
            }
        } catch (Exception e) {
            LOGGER.error("MQ收发消息错误:" + e + " 入参为" + reqMsg);
            e.printStackTrace();
        } finally {
            //断开MQ连接
            if (null != queueManager) {
                try {
                    queueManager.disconnect();
                } catch (MQException e) {
                    LOGGER.error("端口MQ连接时错误" + e);
                }
            }
        }
        return respMsg;
    }


}
